
package taskmanager;

import Network.NetworkAddress;

/**
 * Интерфейс планировщика верхнего уровня
 * @author Aleksey ID=2001
 */
public interface IGlobalTaskManager {
    /**
     * Запросить количество задач в планировщике
     * @return число задач в планировщике
     */
    public int getTaskCount();

    /**
     * Проверить наличие задач в планировщике
     * @return true - здач нет, иначе false
     */
    public boolean isEmpty();

    /**
     * Добавить подчиненный сервер.
     * @param NetworkAddress адрес сервера
     * @return true - сервер добавлен, false - невозможно добавить сервер
     */
    public boolean addServer(NetworkAddress address);

    /**
     * Удалить подчиненный сервер.
     * @param id идентификатор сервера
     * @return true - сервер добавлен, false - сервер с таким id отсутствует
     * или ошибка сети
     */
    public boolean removeServer(long id);

    /**
     * Проверить наличие сервера
     * @param taskID идентификатор сервера
     * @return true - сервер присутствует, false иначе
     */
    public boolean containsServer(long id);

    /**
     * Зпросить список всех добавленных адресов
     * @return массив адресов
     */
    public NetworkAddress [] getServers();

    /**
     * Добавить задачу в планировщик
     * @param task задача, не null !
     * @return true - задача добавлена, false - задача с указанным id уже есть
     */
    public boolean addTask(JTask task);

    /**
     * Удалить задачу из планировщика
     * Процессы связанные с задачей уничтожаются
     * @param taskID идентификатор задачи
     * @return true - задача удалена, false - задачи нет или ошибка сети
     */
    public boolean removeTask(long taskID);

    /**
     * Остановить выполнение задачи
     * @param taskID идентификатор задачи
     * @return true - задача остановлена, false - задачи нет
     */
    public boolean stopTask(long taskID);

    /**
     * Проверить наличие задачи
     * @param taskID идентификатор задачи
     * @return true - задача присутствует, false иначе
     */
    public boolean containsTask(long taskID);

    /**
     * Запросить задачу
     * @param taskID идентификатор задачи
     * @return задача или null в случае отсутствия
     */
    public JTask getTask(long taskID);

    /**
     * Запросить идентификаторы задач в планировщике
     * @return массив идентификаторов задач
     */
    public long[] getAllTasks();

    /**
     * Запросить идентификаторы задач в планировщике заданного сервера
     * @param serverID инентификатор сервера
     * @return массив идентификаторов задач
     */
    public long[] getAllTasks(long serverID);

    /**
     * Запросить идентификаторы ожидающих и приостановленных задач заданного сервера
     * @param serverID инентификатор сервера
     * @return массив идентификаторов задач
     */
    public long[] getWaitTasks(long serverID);

    /**
     * Запросить идентификаторы активных задач заданного сервера
     * @param serverID инентификатор сервера
     * @return массив идентификаторов задач
     */
    public long[] getActiveTasks(long serverID);
}
